home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Scene 96
/
Scene 96 International Edition (Zyklop Software) (Disc 2) (1997).iso
/
misc
/
coding
/
vgacodng
/
part03_b.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
1996-11-22
|
2KB
|
77 lines
program Scrolly2;
uses crt;
const VGA = $A000;
Bits : array[0..7] of byte =
(128,64,32,16,8,4,2,1);
Text : string = 'Ein Scrolly im VGA-Modus 13'+
'h, er scrollt und scrollt u'+
'nd scrollt.................';
var FontSeg,FontOfs : word;
procedure WaitRetrace;assembler;
asm
mov dx,3DAh
@l1:
in al,dx
and al,08h
jz @l1
@l2:
in al,dx
and al,08h
jz @l2
end;
procedure GetFont;assembler;
asm
mov ax,1130h
mov bh,3 { Font-Nummer für 8x8-Font }
int 10h
mov FontSeg,es
{ Segment, in dem der Font abgelegt ist }
mov FontOfs,bp
{ Offset des Fonts }
end;
procedure Scroll;
var I,J : word;
CharPos,CharNo,Color,Character : byte;
begin
CharNo := 1; { Anfangsposition }
repeat
Character := ord(Text[CharNo]);
{ ASCII-Code holen }
for CharPos := 0 to 7 do begin { 8x8 Pixel je }
for I := 0 to 7 do begin { Zeichen }
if mem[FontSeg:FontOfs+(Character*8)+I] and
Bits[CharPos] <> 0 then Color := 31
else Color := black;
{ Wenn daß entsprechende Bit gesetzt ist, }
{ dann Farbe weiß (31) setzen, andernfalls }
{ schwarz. }
mem[$A000:((100+I)*320)+319] := Color;
{ Pixel setzen }
end;
WaitRetrace;
for J := 0 to 7 do for I := 0 to 318 do
mem[$A000:((100+J)*320)+I] :=
mem[$A000:((100+J)*320)+1+I];
{ Alles um einen Pixel nach links bewegen }
end;
inc(CharNo);
if CharNo > length(Text) then CharNo := 1;
until keypressed;
readkey;
end;
begin
GetFont;
asm mov ax,13h; int 10h end; { VGA-Modus 13h }
Scroll;
asm mov ax,03h; int 10h end; { Textmodus }
end.